package com.tsmti.core.common.entity;


/**
 * @Package：com.tsmti.core.common.entity
 * @Class：TreeNode
 * @Description： TODO
 * @Author：zcw
 * @Date：Created in 2018/3/24 12:37
 * @Company:
 * @Version：
 * @Modified By:
 */
public interface BaseTreeNode<ID> {
    /**
     *  主键
     * @return
     */
   ID getId();

    /**
     * 主键
     * @param name
     */
    void setId(ID name);

    /**
     * 是否是根节点
     *
     * @return
     */
    Boolean isRoot();

    /**
     * 获取节点名称
     * @return 节点名称
     */
    String getName();

    /**
     * 设置节点名称
     * @param name
     */
    void setName(String name);

    /**
     * 节点的级别，默认最高级为0
     * @return
     */
    Long getLevel();

    /**
     * 是否为叶节点，为true时表示该节点下面没有子节点了
     * @return
     */
    Boolean isLeaf();

    /**
     * 获取 parentIds 之间的分隔符
     *
     * @return
     */
    String getSeparator();

    /**
     * 把自己构造出新的父节点路径
     *
     * @return
     */
    String makeSelfAsNewParentIds();

    /**
     * 父路径
     *
     * @return
     */
    ID getParentId();

    /**
     * 设置父级ID
     * @param parentId
     */
    void setParentId(ID parentId);

    /**
     * 所有父路径 如1,2,3,
     *
     * @return
     */
    String getParentIds();

    /**
     * 设置所有父级ID
     * @param parentIds
     */
    void setParentIds(String parentIds);

    /**
     * 是否默认展开状态
     * @return
     */
    Boolean getExpanded();

    /**
     * 是否默认展开状态
     * @param expanded
     */
    void setExpanded(Boolean expanded);

    /**
     * 是否已经加载过子节点（为false时点击节点会自动加载子节点）
     * @param loaded
     */
    void setLoaded(Boolean loaded);

    /**
     * 是否已经加载过子节点（为false时点击节点会自动加载子节点）
     * @return
     */
    Boolean getLoaded();

}
